/*
ID: icerupt1
PROG: fracdec
LANG: C++11
*/

/* solution
 *
 * 算是个 good problem 吧。。
 * 问题很简单的。做法也很简单，用长除法模拟整个过程，当余数出现循环的时候就
 * 意味着小数也开始循环。
 * 然后各种细节。。。
 * 然后各种代码能力仍需提高。。。
 *
*/
#include <fstream>
#include <iostream>
#include <unordered_set>
#include <vector>
#include <string>

std::ifstream fin {"fracdec.in" };
std::ofstream fout{"fracdec.out"};

int n, d;
std::string ans = "0.";

void print(std::string s)
{
	int len = 76, i = 1;
	for (; i <= int(s.size()); i++) {
		std::cout << s[i-1]; fout << s[i-1];
		if (!(i % len)) { std::cout << '\n'; fout << '\n'; }
	}
	if (i % len) { std::cout << '\n'; fout << '\n'; }
}

int main()
{
	std::vector<int> decimal;
	std::vector<int> remainder;
	std::unordered_set<int> check_remainder;
	fin >> n >> d;
	if (n >= d) {
		ans = std::to_string(n/d) + ".";
		n %= d;
		if (!n) { print(ans + '0'); return 0; }
	}

	decimal.push_back(-11);
	remainder.push_back(n);
	check_remainder.insert(n);

	int circle = -1;
	for ( ; n; ) {
		n *= 10;
		decimal.push_back(n / d);
		if (check_remainder.find(n % d) != check_remainder.end()) {
			circle = n % d;
			break;
		}
		n %= d;
		remainder.push_back(n);
		check_remainder.insert(n);
	}
	bool first = false;
	for (int i = 0; i < (int)decimal.size(); i++) {
		if (decimal[i] >= 0) ans += std::to_string(decimal[i]);
		if (remainder[i] == circle && !first) { ans += '('; first = true; }
	}
	if (circle != -1) ans += ')';

	print(ans);
}
